using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using SilverlightViewport.XNA;

namespace XNATestApplication
{
	/// <summary>
	/// This is the main type for your game
	/// </summary>
	public class Game1 : Game
	{
		private GraphicsDeviceManager _graphics;
		private SpriteBatch _spriteBatch;
		private XnaSilverlightComponent _silverlight;
		private Texture2D _mouseCursor;

		private Vector2 Size = new Vector2(611, 355);
		public Game1()
		{

			_graphics = new GraphicsDeviceManager(this);

			// the size of the sample Silverlight XAP below
			_graphics.PreferredBackBufferWidth = (int)Size.X;
			_graphics.PreferredBackBufferHeight = (int)Size.Y;
			Content.RootDirectory = "Content";

			_silverlight = new XnaSilverlightComponent(this);
			_silverlight.Size = Size;
			_silverlight.Position = Vector2.Zero;
			_silverlight.BaseUrl = "http://silverlight.net/";
			_silverlight.Source = "http://silverlight.net/clientBin/showcasenav/ShowcaseNav.xap";
			this.Components.Add(_silverlight);
		}

		/// <summary>
		/// Allows the game to perform any initialization it needs to before starting to run.
		/// This is where it can query for any required services and load any non-graphic
		/// related content.  Calling base.Initialize will enumerate through any components
		/// and initialize them as well.
		/// </summary>
		protected override void Initialize()
		{
			// TODO: Add your initialization logic here
			base.Initialize();
		}

		/// <summary>
		/// LoadContent will be called once per game and is the place to load
		/// all of your content.
		/// </summary>
		protected override void LoadContent()
		{
			// Create a new SpriteBatch, which can be used to draw textures.
			_spriteBatch = new SpriteBatch(GraphicsDevice);

			// janky windows cursor
			_mouseCursor = Content.Load<Texture2D>("cursor");
		}

		/// <summary>
		/// UnloadContent will be called once per game and is the place to unload
		/// all content.
		/// </summary>
		protected override void UnloadContent()
		{
			// TODO: Unload any non ContentManager content here
		}

		/// <summary>
		/// Allows the game to run logic such as updating the world,
		/// checking for collisions, gathering input, and playing audio.
		/// </summary>
		/// <param name="gameTime">Provides a snapshot of timing values.</param>
		protected override void Update(GameTime gameTime)
		{
			// Allows the game to exit
			if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
				this.Exit();

			base.Update(gameTime);
		}

		/// <summary>
		/// This is called when the game should draw itself.
		/// </summary>
		/// <param name="gameTime">Provides a snapshot of timing values.</param>
		protected override void Draw(GameTime gameTime)
		{
			GraphicsDevice.Clear(Color.CornflowerBlue);

			base.Draw(gameTime);

			MouseState ms = Mouse.GetState();
			_spriteBatch.Begin();
				_spriteBatch.Draw(_mouseCursor, new Vector2(ms.X, ms.Y), Color.White);
			_spriteBatch.End();
		}
	}
}
